<?php
/**
 * Form_Radio
 *
 * класс Form_Radio позволяет работать с <input type="radio"
 * @author Дмитрий Кузьма <kouzma.d@gmail.com>
 * @version 1.1
 */
class Form_Radio extends Form_Element
{
  protected $_valueArray = array(); //Массив значений
  protected $_selectedValue; // Выбранное значение
  protected $_useSimpleArray = true; //Использовать ли упрощенный масссив
  protected $_keyName; //поле массива, из которого брать ключ для options
  protected $_valueName; //поле массива, из которого брать  значение для options
  protected $_idPrefix = null; //поле массива, из которого брать  значение для options
  protected $_separator = '<br />'; //Разделитель радиокнопок

  function __construct ($name,  $class, $valueArray, $selectedValue = -1) {
    parent::__construct($name, $class);
      $this->_valueArray = $valueArray;
      $this->_selectedValue = $selectedValue;
  }
  /**
   * Преобразует текущий элемент с его настройками к строковому виду
   *
   * @return string
   */
  function toString () {
    $retStr = '';
    $arrSubmit = self::getSubmitInfo($this->_name, $this->_selectedValue);
    if ($this->_useSimpleArray)
      $retStr .= self::getInputsOfSimpleArray();
    else 
      $retStr .= self::getInputs();
    $retStr .= self::getExecutionMessage($arrSubmit, $this->_useCorrectMessage);
    return $retStr;
  }
  /**
   * форирует строку с импутами из соответствующего массива
   *
   * @param array $arrOptions
   * @param mixed $selectedValue 
   * @return string
   */
  public function getInputsOfSimpleArray() {
    if ($this->_valueArray == null)
      return null;
    $retStr = '';
    $inputsSize = sizeof($this->_valueArray);
    for ($i = 0 ; $i < $inputsSize; $i++) {
      $retStr .= '<input type="radio" ';
      $retStr .= self::getStrTypicalAttributes();
      $retStr .= self::getStrId($this->_valueArray[$i][0]);
      $retStr .= 'value="' . $this->_valueArray[$i][0] . '"';
      if ($this->_selectedValue == $this->_valueArray[$i][0])
        $retStr .= ' checked="checked"';
      $retStr .= self::getStrAttrs() . ' '; 
      $retStr .= ' />';
      if ($this->_valueArray[$i][1] && $this->_idPrefix)
        $retStr .= '<label for="' . $this->_idPrefix . $this->_valueArray[$i][0] . '">' . $this->_valueArray[$i][1] . '</label>';
      else
        $retStr .= $this->_valueArray[$i][1];
      $retStr .= $this->_separator;
    }
    return $retStr;
  }
  
  public function getInputs() {
    $retStr = '';
    $inputsSize = sizeof($this->_valueArray);
    for ($i = 0 ; $i < $inputsSize; $i++) {
      $retStr .= '<input type="radio" ';
      $retStr .= self::getStrTypicalAttributes();
      $retStr .= self::getStrId($this->_valueArray[$i][$this->_keyName]);
      $retStr .= 'value="' . $this->_valueArray[$i][$this->_keyName] . '"';
      if ($this->_selectedValue == $this->_valueArray[$i][$this->_keyName])
        $retStr .= ' checked="checked"';
      $retStr .= ' />';
      if ($this->_valueArray[$i][$this->_valueName] && $this->_idPrefix)
        $retStr .= '<label for="' . $this->_idPrefix . $this->_valueArray[$i][$this->_keyName] . '">' . $this->_valueArray[$i][$this->_valueName] . '</label>';
      else
        $retStr .= $this->_valueArray[$i][$this->_valueName];
      $retStr .= $this->_separator;
    }
    return $retStr;
  }  
  /**
   * Устанавливает начение префикса атрибута id
   *
   * @param string $idPrefix
   */
  public function setIdPrefix($idPrefix) {
    $this->_idPrefix = $idPrefix;
  }
  /**
   * Задет параметры массива. После этого уже не будет использоваться упрощенный вариант
   *
   * @param string $keyName
   * @param string $valueName
   */
  public function setArrayParametrs($keyName, $valueName) {
    $this->_useSimpleArray = false;
    $this->_keyName = $keyName;
    $this->_valueName = $valueName;
  }
  /**
   * получает строковое представление стандартных атрибутов
   * Метод унаследован и переопределен
   *
   * @return string
   */
  public function getStrTypicalAttributes() {
    $retStr = 'name="' . $this->_name . '" '; 
    if ($this->_class != '')
      $retStr .= 'class="' . $this->_class . '" ';   
    return $retStr;
  }
  public function getStrId($id) {
    if ($this->_idPrefix)
      return 'id="' . $this->_idPrefix . $id . '" ';    
    else
      return '';
  }
}
?>